package com.ror.java.se.map.treemap;

import java.util.StringJoiner;
import java.util.TreeMap;

public class Demo03TreeMapCounter {
    /*
        需求：字符串"aababcabcdabcde"
            请统计字符串中每一个字符出现的次数，并按照以下格式输出
        输出结果：a(5) b(4) c(3) d(2) e(1)
    */
    public static void main(String[] args) {
        //分析：统计的东西较多时，用计数器思想很麻烦
        // 此时用map集合更好，键为统计项，值为计数
        // 题目不要求排序，使用HashMap；要求排序，使用TreeMap
        String str = "aababcabcdabcde";
        TreeMap<Character, Integer> charCntMap = new TreeMap<>();
        for (int i = 0; i < str.length(); i++) {
            char curChar = str.charAt(i);
            if (charCntMap.containsKey(curChar)) {
                int charCnt = charCntMap.get(curChar);
                charCntMap.put(curChar, ++charCnt);
            } else {
                charCntMap.put(curChar, 1);
            }
        }

        //方式1 直接输出
        charCntMap.forEach((key, value) -> {
            System.out.print(key + "(" + value + ") ");
        });

        System.out.println();

        //方式2 StringBuilder构建字符串
        StringBuilder resultSb = new StringBuilder();
        charCntMap.forEach((key,value)->{
            resultSb.append(key).append("(").append(value).append(") ");
        });
        System.out.println(resultSb);

        //方式3 StringJoiner构建字符串
        StringJoiner resultSj = new StringJoiner("","","");
        charCntMap.forEach((key,value)->{
            resultSj.add(key.toString()).add("(").add(value.toString()).add(") ");
        });
        System.out.println(resultSj);
    }
}
